import axios from 'axios'
import { Notification, Message } from 'element-ui'
import router from '../router'

// create an axios instance
const service = axios.create({
    baseURL: window.g.baseURL, // api 的 base_url
    withCredentials: true,
    timeout: 300000 // request timeout
})

// request interceptor
service.interceptors.request.use(
    config => {
        //config.headers['token'] = Auth.getToken()
        return config
    },
    error => {
        // Do something with request error
        // console.log(error) // for debug
        Promise.reject(error)
    }
)

// response interceptor
service.interceptors.response.use(
    
    //response => response,
    /**
     * 下面的注释为通过在response里，自定义code来标示请求状态
     * 当code返回如下情况则说明权限有问题，登出并返回到登录页
     * 如想通过 xmlhttprequest 来状态码标识 逻辑可写在下面error中
     * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
     */
    // response => {
    //   const res = response.data
    //   if (res.code !== 20000) {
    //     Message({
    //       message: res.message,
    //       type: 'error',
    //       duration: 5 * 1000
    //     })
    //     // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
    //     if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
    //       // 请自行在引入 MessageBox
    //       // import { Message, MessageBox } from 'element-ui'
    //       MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
    //         confirmButtonText: '重新登录',
    //         cancelButtonText: '取消',
    //         type: 'warning'
    //       }).then(() => {
    //         store.dispatch('FedLogOut').then(() => {
    //           location.reload() // 为了重新实例化vue-router对象 避免bug
    //         })
    //       })
    //     }
    //     return Promise.reject('error')
    //   } else {
    //     return response.data
    //   }
    // },
    response => {
        
        let data;
        // IE9时response.data是undefined，因此需要使用response.request.responseText(Stringify后的字符串)
        if (response.data == undefined) {
            data = JSON.parse(response.request.responseText)
        } else {
            data = response.data
            // const code  = response.data.code
            // if(code == '0') {
            //     data = response.data.data
            // }else {
            //     Message({
            //         message: response.data.msg,
            //         type: 'error',
            //         duration: 5 * 1000
            //     })
            //     return Promise.reject('error')
            // }
        }
        return data
    },
    error => {
        if (error && error.response) {
            switch (error.response.status) {
                case 400:
                error.message = '数据请求错误'
                break
                case 401:
                error.message = '未授权，请登录'
                break
                case 403:
                error.message = '拒绝访问'
                break
                case 404:
                error.message = '请求地址出错'
                break
                case 408:
                error.message = '请求超时'
                break
                case 500:
                error.message = '服务器内部错误'
                break
                case 501:
                error.message = '服务未实现'
                break
                case 502:
                error.message = '网关错误'
                break
                case 503:
                error.message = '服务不可用'
                break
                case 504:
                error.message = '网关超时'
                break
                case 505:
                error.message = 'HTTP版本不受支持'
                break
                default:
            }
        }
        Message({
            message: error.message||'系统错误！',
            type: 'error',
            duration: 3 * 1000
        })
        if(error.response.status == 403) {
            clearAllSession()
            router.push('/')
        }
        return Promise.reject(error)
    }
)

export default service
